California has park_count
state parks, including state beaches and historic parks. The current \$old_budget / 1e6
M budget is insufficient to maintain these parks, and old_closed_park_count
parks will be shut down at least part-time. Most parks charge \$old_admission
per vehicle for admission.
Suppose that an extra \$
tax
was charged tocompliance
% ofis_tax_per_vehicle
. Park admission would benew_admission ? '$' + new_admission : "free"
forapplies_to_everyone
.
This would collect an extra $(delta_budget)
($(tax_collected)
from the tax, minus $(delta_revenue)
delta_revenue < 0
lost
delta_revenue > 0
additional revenue from admission) for a total state park budget of $(budget)
M.
budget < maintainance_budget
This is not sufficient to maintain the parks, and floor(closed_park_count)
parks would be shut down at least part-time.
budget < repair_budget
This is sufficient to maintain the parks in their current state, but not fund a program to bring safety and cleanliness up to acceptable standards.
budget < max_budget
This is sufficient to maintain the parks in their current state, plus fund a program to bring safety and cleanliness up to acceptable standards over the next restoration_time
years
That is ridiculous. It's not even funny.
Park attendance would rise by floor(relative_visitor_count * 100)
%, to floor(new_visitor_count / 1e6)
M visits each year.
In [1]:
%reload_ext autoreload
%autoreload 2
In [2]:
from math import atan
from ipytangle import tangle
In [3]:
itpv_options = ["California taxpayers", "vehicle registrations"]
a2e_options = ["those who paid the charge", "everyone"]
def tax_count(is_tax_per_vehicle, registered_vehicles, taxpayers):
return registered_vehicles if (is_tax_per_vehicle == itpv_options[1]) else taxpayers
def tax_collected(tax, compliance, tax_count):
return tax * (compliance / 100) * tax_count
def eligible_new(applies_to_everyone, visitors_instate, is_tax_per_vehicle, vehicle_owners):
if applies_to_everyone == a2e_options[1]:
return 1
return (visitors_instate / 100) * (
is_tax_per_vehicle == itpv_options[1] or vehicle_owners / 100)
def avg_admission(old_admission, eligible_new, new_admission):
return old_admission + eligible_new * (new_admission - old_admission)
def new_visitor_count(old_visitor_count, avg_admission, old_admission):
return old_visitor_count * max(
0.2,
1 + 0.5 * atan(1 - avg_admission / old_admission)
)
def delta_revenue(old_visitor_count, new_visitor_count, old_admission,
admission_to_revenue, avg_admission):
old_rev = old_visitor_count * old_admission * admission_to_revenue
new_rev = new_visitor_count * avg_admission * admission_to_revenue
return new_rev - old_rev
def delta_budget(tax_collected, delta_revenue):
return tax_collected + delta_revenue
def delta_visitor_count(new_visitor_count, old_visitor_count):
return new_visitor_count - old_visitor_count
def relative_visitor_count(delta_visitor_count, old_visitor_count):
return abs(delta_visitor_count / old_visitor_count)
def budget(old_budget, delta_budget):
return old_budget + delta_budget
def closed_park_count(old_closed_park_count, maintainance_budget, budget, old_budget):
return old_closed_park_count * (maintainance_budget - budget) / maintainance_budget - old_budget
def restoration_time(budget, repair_budget, max_budget):
return 10 - 9 * (budget - repair_budget) / (max_budget - repair_budget)
In [4]:
prop21 = tangle(
# givens
park_count=278,
old_admission=12,
registered_vehicles = 28e6,
taxpayers=13657632,
old_visitor_count=75e6,
old_budget=400e6,
old_closed_park_count=150,
admission_to_revenue=0.1,
visitors_instate=85,
vehicle_owners=95,
maintainance_budget=600e6,
repair_budget=750e6,
max_budget=1000e6,
# controls
tax=18,
compliance=100,
new_admission=0,
is_tax_per_vehicle=itpv_options,
applies_to_everyone=a2e_options,
# derived values
tax_count=(0, tax_count),
tax_collected=(0.0, tax_collected),
eligible_new=(0.0, eligible_new),
avg_admission=(0, avg_admission),
new_visitor_count=(0, new_visitor_count),
delta_revenue=(0.0, delta_revenue),
delta_budget=(0.0, delta_budget),
delta_visitor_count=(0.0, delta_visitor_count),
relative_visitor_count=(0.0, relative_visitor_count),
budget=(0.0, budget),
closed_park_count=(0, closed_park_count),
restoration_time=(0, restoration_time)
)
prop21
In [ ]: